package jp.co.menox.tmserver.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.appengine.api.datastore.Key;

import jp.co.menox.tmcommon.model.Category;

/**
 * カテゴリマスタ用dao
 * @author
 *
 */
public class CategoryDao extends TmServerDaoBase<Category>{

    /** ID-カテゴリ名map */
    protected Map<Long, String> categoryMap = null;
    

    // **** 固有メソッド
    
    /**
     * ID-カテゴリ名をmap形式で取得する
     * @return
     */
    public Map<Long, String> getCategoryMap() {
        if (this.categoryMap != null) {
            // すでに取得済み
            return this.categoryMap;
        }

        this.categoryMap = new HashMap<Long, String>();
        List<Category> modelList = getAll();
        if (modelList == null) {
            return this.categoryMap;
        }
        // mapに詰め替え
        for (Category model: modelList) {
            this.categoryMap.put(Long.valueOf(model.getId()), model.getName());
        }
        
        return this.categoryMap;
    }
    

    // **** イベント処理

    /**
     * データ追加時の処理
     * @param key
     */
    @Override
    protected void onInserted(Key key){
        // ID-カテゴリ名mapの再取得（予約）
        this.categoryMap = null;

        super.onInserted(key);
    }

    /**
     * データ更新時の処理
     * @param key
     */
    @Override
    protected void onUpdated(Key key){
        // ID-カテゴリ名mapの再取得（予約）
        this.categoryMap = null;

        super.onUpdated(key);
    }

    /**
     * データ論理削除時の処理
     * @param key
     */
    @Override
    protected void onDeleted(Key key){
        // ID-カテゴリ名mapの再取得（予約）
        this.categoryMap = null;

        super.onDeleted(key);
    }

    /**
     * データ物理削除時の処理
     * @param key
     */
    @Override
    protected void onVanished(Key key){
        // ID-カテゴリ名mapの再取得（予約）
        this.categoryMap = null;

        super.onVanished(key);
    }


    // **** サンプルメソッド
    
    /**
     * カテゴリIDからカテゴリ名称を取得する<br />
     * 使用は非推奨：マスタなのでmapにした方が便利
     * @param id カテゴリID
     * @return 存在しない場合はnull
     */
    @Deprecated
    public String getCategoryName(long categoryId) {
        Category model = selectBg(categoryId);
        if (model == null) {
            return null;
        }
        return model.getName();
    }
    
}
